/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package control;

import java.util.ArrayList;
import javax.swing.DefaultListModel;
import model.FaktureretVare;
import model.Vare;
import view.GUI;

/**
 *
 * @author Morten J, Morten B & Jonas
 */
public class FaktureretVareHandler {

    private DefaultListModel model;
    private static ArrayList<FaktureretVare> faktureretVareListe;

    public FaktureretVareHandler(DefaultListModel model) {
        createFaktureretVareListe();
        this.model = model;
    }

    public static ArrayList<FaktureretVare> getFaktureretVareListe() {
        return faktureretVareListe;
    }

    public void createFaktureretVareListe() {
        faktureretVareListe = new ArrayList<>();
    }

    public void checkVare(int vareID, int antal) {
        if (antal > 0) {
            Vare vareFound = null;
            int vareAntal = 0;
            boolean itemFound = false;
            boolean itemInStock = false;
            for (Vare vare1 : VareHandler.getVareListe()) {
                if (vareID == vare1.getVareNr()) {
                    vareAntal = vare1.getVarebeholdning();
                    itemFound = true;
                    vareFound = vare1;
                    if (vare1.getVareGruppeNavn().equals("Billet")) {
                        itemInStock = true;
                        addToInvoice(vare1, antal);
                    } else if (antal <= vare1.getVarebeholdning()) {
                        itemInStock = true;
                        addToInvoice(vare1, antal);
                    }
                }
            }
            if (!itemFound || !itemInStock) {
                String itemError = "";
                if (!itemFound) {
                    itemError = "Varenummer: " + vareID + " findes ikke i varelisten";
                } else if (!itemInStock) {
                    itemError = "Der findes ikke " + antal + 
                            " af den valgte vare på lager. Beholdning: " + vareAntal;
                }
                GUI.getGuiHandler().setFeedbackMessage(itemError, Main.getRED_COLOR());
            } else {
                GUI.getGuiHandler().setFeedbackMessage("Tilføjet: " + vareFound + 
                        " (" + antal + " stk)", Main.getGREEN_COLOR());
            }
        }
    }

    public void addToInvoice(Vare vare, int antal) {
        FaktureretVare fv = new FaktureretVare(antal, vare.getSalgsPrisKr(), vare.getSalgsPrisEu(), vare);
        boolean vareFundet = false;
        for (int i = 0; i < model.size(); i++) {
            FaktureretVare fVare = (FaktureretVare) model.get(i);
            if (fVare.getVare() == vare) {
                fVare.setAntal(fVare.getAntal() + antal);
                vareFundet = true;
                model.set(i, fVare);
            }
        }
        if (!vareFundet) {
            faktureretVareListe.add(fv);
            model.addElement(fv);
        }
        if (vare.getVarebeholdning() > 0) {
            vare.setVarebeholdning(vare.getVarebeholdning() - antal);
        }
    }

    public void removeFromInvoice(int lineNumber) {
        int vareB = faktureretVareListe.get(lineNumber).getVare().getVarebeholdning();
        int vareAntal = faktureretVareListe.get(lineNumber).getAntal();
        faktureretVareListe.get(lineNumber).getVare().setVarebeholdning(vareB + vareAntal);
        faktureretVareListe.remove(lineNumber);
        model.remove(lineNumber);
    }

    public void clearList() {
        model.removeAllElements();
    }

    public int getVareNr(int lineNumber) {
        return faktureretVareListe.get(lineNumber).getVare().getVareNr();
    }
}
